package com.socket;

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import com.util.Result;
import com.util.SerialPortManager;

@Component
public class SocketServer{
	
	
//	@PostConstruct  
//	public void Start() {  //项目启动便开启监听串口端口，默认先连上第一个端口。（http请求服务）
//		new Thread(()->{
//			startLink(null,null);
//		}).start();
//	}
	
	
	
	public Result<String> startLink(String port) {
		
		Result<String> result = new Result<>();
		if(SerialPortManager.openPort!=null) {  //如果已经有打开的端口，则尝试关闭重连
			if(StringUtils.isNotBlank(port)&&port.equals(SerialPortManager.nowPort)) {
				result.setCode(600);
				result.setMsg("端口相同，不重新连接");
				return result;
			}else if(StringUtils.isBlank(port)) {
				result.setCode(500);
				result.setMsg("未传端口，不重新连接");
				return result;
			}else {   //关闭重连
				System.out.println("关闭"+SerialPortManager.openPort+"端口，尝试连接"+port);
				SerialPortManager.closePort();
				LocalDateTime begin = LocalDateTime.now();
				while (SerialPortManager.openPort!=null) {
					LocalDateTime now = LocalDateTime.now();
					long millis = Duration.between(begin, now).toMillis();
					if(millis>5000) {
						result.setCode(500);
			            result.setMsg("关闭端口超时，请重启客户端");
			            SerialPortManager.openPort=null;
			            return result;
					}
				}
				SerialPortManager.nowPort=null;
			}
		}
		
		SerialPortManager portManager = new SerialPortManager();
		if(StringUtils.isNotBlank(port)) {
			System.out.println("前端传入端口："+port);
			try {
				SerialPortManager.openPort = portManager.openPort(port, 9600);
				SerialPortManager.nowPort=port;
			} catch (Exception e) {
				e.printStackTrace();
				result.setCode(500);
				result.setMsg("打开失败");
				SerialPortManager.openPort=null;
				SerialPortManager.nowPort=null;
				return result;
			}
		}else {
			result.setCode(500);
            result.setMsg("未发现端口连接");
            return result;
		}
			
		// 添加串口监听
        if (SerialPortManager.openPort==null){
            	System.out.println("请检查与设备的连接");
            	result.setCode(500);
    			result.setMsg("请检查与设备的连接");
                return result;
        }else {
        	portManager.addListener(SerialPortManager.openPort,result);
        	System.out.println("连接成功");
        }
        
        result.setCode(200);
        result.setMsg("连接成功");
		return result;
	}
}
